Skip to content

fix(builder): persist contractsDB across blocks within a checkpoint#21520

Merged
spalladino merged 5 commits intomerge-train/spartanfrom
palla/checkpoint-builder-contracts-db
Mar 17, 2026
Merged

fix(builder): persist contractsDB across blocks within a checkpoint#21520
spalladino merged 5 commits intomerge-train/spartanfrom
palla/checkpoint-builder-contracts-db

Conversation

@spalladino
Copy link
Contributor

@spalladino spalladino commented Mar 13, 2026

Motivation

When building multiple blocks within a single checkpoint, the CheckpointBuilder was creating a new PublicContractsDB instance for each block. This meant that contracts deployed in an earlier block within the same checkpoint were not visible to subsequent blocks, causing calls to newly deployed contracts to fail.

Approach

Move the PublicContractsDB instance to be a persistent field on CheckpointBuilder, initialized once in the constructor and shared across all blocks in the checkpoint. Wrap block building in checkpoint/commit/revert semantics on the contracts DB so that failed blocks don't leak state.

Changes

  • validator-client: Promote contractsDB from a local variable in makeBlockBuilderDeps to a class field on CheckpointBuilder. Wrap buildBlock in createCheckpoint/commitCheckpoint/revertCheckpoint calls on the contracts DB.
  • validator-client (tests): Add tests verifying that the contracts DB checkpoint lifecycle is correctly managed across successful and failed block builds.
  • end-to-end (tests): Add e2e test that deploys a contract and calls it in separate blocks within the same slot, validating cross-block contract visibility within a checkpoint.

Fixes A-658

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@spalladino spalladino added ci-no-fail-fast Sets NO_FAIL_FAST in the CI so the run is not aborted on the first failure backport-to-v4-next labels Mar 13, 2026
@spalladino spalladino enabled auto-merge (squash) March 17, 2026 01:00
Brings down test time from +1000s to 2s.
@spalladino spalladino merged commit b56ac49 into merge-train/spartan Mar 17, 2026
11 checks passed
@spalladino spalladino deleted the palla/checkpoint-builder-contracts-db branch March 17, 2026 21:41
AztecBot pushed a commit that referenced this pull request Mar 17, 2026
…21520)

## Motivation

When building multiple blocks within a single checkpoint, the
`CheckpointBuilder` was creating a new `PublicContractsDB` instance for
each block. This meant that contracts deployed in an earlier block
within the same checkpoint were not visible to subsequent blocks,
causing calls to newly deployed contracts to fail.

## Approach

Move the `PublicContractsDB` instance to be a persistent field on
`CheckpointBuilder`, initialized once in the constructor and shared
across all blocks in the checkpoint. Wrap block building in
checkpoint/commit/revert semantics on the contracts DB so that failed
blocks don't leak state.

## Changes

- **validator-client**: Promote `contractsDB` from a local variable in
`makeBlockBuilderDeps` to a class field on `CheckpointBuilder`. Wrap
`buildBlock` in `createCheckpoint`/`commitCheckpoint`/`revertCheckpoint`
calls on the contracts DB.
- **validator-client (tests)**: Add tests verifying that the contracts
DB checkpoint lifecycle is correctly managed across successful and
failed block builds.
- **end-to-end (tests)**: Add e2e test that deploys a contract and calls
it in separate blocks within the same slot, validating cross-block
contract visibility within a checkpoint.

Fixes A-658

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
@AztecBot
Copy link
Collaborator

✅ Successfully backported to backport-to-v4-next-staging #21654.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-to-v4-next ci-no-fail-fast Sets NO_FAIL_FAST in the CI so the run is not aborted on the first failure

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants